package jdiy.sample.action;

import net.jdiy.core.*;

import java.util.HashMap;
import java.util.Map;

//新闻中心的相关Action
public class news extends JDiyAction {
    App app = App.get();//取得JDiy App上下文
    Dao dao = app.getDao(); //取得默认的数据库操作对象(DataAccessObject)
    Ls leftNav;

    /**
     * Action:新闻综合页面
     */
    public void index() {
        this.initLeftNav(); //初始化左导航要循环输出的数据
        Map<String, Ls> newsMap = new HashMap<String, Ls>();//定义map,以便页面取每个新闻栏目下的最新５条文章．
        for(Rs nav: leftNav.getItems()){//循环每个新闻栏目，每个栏目分别取5条最新(按更新时间降序)的新闻放到map中.
            Ls newsList = dao.ls(new Args("news","tid='"+nav.get("id")+"' AND isc=0 ORDER BY dt2 DESC", 5,1));
            newsMap.put(nav.get("id"), newsList);
        }


        setAttr("leftNav", leftNav);//将查询出来的Ls对象设置到request请求中，以便在jsp展现层页面输出.
        setAttr("navNews", newsMap);//将查询出来的Ls对象设置到request请求中，以便在jsp展现层页面输出.
        forward("/WEB-INF/view/news/index.jsp"); //forward到展现层页面．即将request请求转交页面去输出。

    }

    /*
    具体的某个新闻栏目的新闻列表页面Action。
     */
    public void list(){
        this.initLeftNav(); //初始化左导航要循环输出的数据
        String classId=app.get("classId");//获取地址栏传过来的要显示新闻的新闻栏目ID

        int currentPage=app.getInt("page",1);//当前的页码，如果URL地址栏中没有page这个变量，则默认显示第1页的数据

        //分页查询（每页显示15条记录）
        Ls newsLs = dao.ls(new Args("news","tid='"+classId+"' AND isc=0 ORDER BY dt2 DESC", 15, currentPage));
        setAttr("newsLs", newsLs);// 将查询出来的新闻列表对象设置到请求流中，以便在jsp页面中输出它

        Rs catalog = dao.rs(new Args("news","id='"+classId+"'")); //获取当前新闻栏目的Rs记录集对象（在网页title标题，和"您的位置"这两处会用到）
        setAttr("catalog", catalog);// 将查询出来的新闻栏目信息设置到请求流中，以便在jsp页面中使用它

        forward("/WEB-INF/view/news/list.jsp"); //forward到展现层页面．即将request请求转交页面去输出。

    }

    //新闻阅读页的Action
    public void read(){
        this.initLeftNav(); //初始化左导航要循环输出的数据
        String classId=app.get("classId");//获取地址栏传过来的要显示新闻的新闻栏目ID

        Rs catalog = dao.rs(new Args("news","id='"+classId+"'"));
        setAttr("catalog", catalog); //获取当前新闻栏目的Rs记录集对象并set到request请求流中（在网页title标题，和"您的位置"等处会用到）

        String id = app.get("id");//获取要显示的新闻的id
        Rs news = dao.rs(new Args("news","id='"+id+"'"));//查询出该新闻内容

        if(!news.isNull()){//如果找到了新闻，则更新阅读次数+1.
            news.set("hits", news.getInt("hits")+1);
            dao.save(news);//更新阅读次数
        }
        setAttr("news",news);//将查询出的新闻内容设置到请求流中，供页面输出


        forward("/WEB-INF/view/news/read.jsp"); //forward到展现层页面．即将request请求转交页面去输出。
    }



    /**
     * 此方法查询出页面左导航的栏目内容，并设置到request请求中. 以便页面上输出
     */
    private void initLeftNav() {
        //查询出［新闻中心］栏目下的所有子栏目(for页面左侧的菜单导航输出)．
        // news是数据库表名(由JDiy建站平台后台配置后生成的树型节点表),
        // 后面的条件tid='y0gw0te8no'用于查询id=y0gw0te8no的这个节点下面的所有子节点(子节点的tid=父节点的id)
        //要查看某个节点的id值，可以在JDiy建站平台的[系统配置]-[数据表管理]中对应的表'节点管理'页面取得．
        leftNav = dao.ls(new Args("news", " tid='y0gw0te8no' "));


        setAttr("leftNav", leftNav);//将查询出来的Ls对象设置到request请求中，以便在jsp展现层页面输出.

    }
}
